/**
 * @file      pufs_ecp_mprog.c
 * @brief     PUFsecurity ECP micro program
 * @copyright 2020 PUFsecurity
 */
/* THIS SOFTWARE IS SUPPLIED BY PUFSECURITY ''AS IS'' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. TO THE FULLEST
 * EXTENT ALLOWED BY LAW, PUFSECURITY'S TOTAL LIABILITY ON ALL CLAIMS IN
 * ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES,
 * IF ANY, THAT YOU HAVE PAID DIRECTLY TO PUFSECURITY FOR THIS SOFTWARE.
 */

#include "pufs_ecp_mprog.h"

#define ECF39303 1

/*****************************************************************************
 * Static variables - CMAC
 ****************************************************************************/
#ifdef ECF39303
/**
 * @brief CMAC of RSA micro programs for ECF39303-00000000
 */

static pufs_rsa_mprog_cmac_st sum_ECF39303_00000000_RSA2048 =
{
    .prk = "\xde\x95\xd0\x35\x2e\x47\x2e\x51\xce\x44\x80\x2a\x61\xbf\x9e\xf2",
    .puk = "\x81\xac\xcd\x33\x4e\x43\x17\x68\x5d\xad\x83\x42\x78\x99\x49\x27",
};
#else
/**
 * @brief CMAC of RSA micro programs for ECF09303-00000000
 */

static pufs_rsa_mprog_cmac_st sum_ECF09303_00000000_RSA2048 =
{
    .prk = "\x53\x12\x35\x6b\x74\xf8\x6a\xb9\xc5\x48\x4c\x5e\x6b\xbb\x3e\xa3",
    .puk = "\xe1\x4c\x60\xc2\x8c\x5b\x22\xe4\x58\x7c\x17\x07\x9a\x11\x20\x8d",
};
#endif
#ifdef ECF39303
/**
 * @brief CMAC of SM2 micro programs for ECF39303-00000000
 */

static pufs_sm2_mprog_cmac_st sum_ECF39303_00000000_SM2 =
{
    .enc_oss = "\xfe\x77\xa0\x0e\xd0\x9c\xd5\x55\xa9\x69\xc8\xa8\xe9\x07\x9f\x1a",
    .dec_oss = "\xcb\xcd\x15\xe8\x77\x0f\xce\x3e\x5e\x73\xc1\x9a\xdc\xfe\xac\x0a",
    .puk_gen = "\xc3\xbd\x35\x20\x82\x9b\x33\xd4\x07\x06\xcb\xa6\x60\xc9\x79\xb1",
    .prks_gen = "\x1c\xaa\x7e\x3f\xb4\x9f\x0b\xfe\xba\xc3\x68\x0e\x89\xec\xbb\xc7",
    .sign    = "\xe1\x67\x3c\x16\x70\x7a\x4c\x9b\x5d\x3f\x1a\xf9\xfa\xe8\x41\x73",
    .verify  = "\x07\x6f\x99\xfe\x61\xa6\xfa\x6f\xde\x81\x0d\x10\x6e\x2f\x45\x6f",
    .kekdf   = "\x5e\x45\x0f\xbc\x75\x66\x50\x3d\xe2\xe6\x05\x37\xd8\xbb\x4a\xe9", 
};
#else
/**
 * @brief CMAC of SM2 micro programs for ECF09303-00000000
 */

static pufs_sm2_mprog_cmac_st sum_ECF09303_00000000_SM2 =
{
    .enc_oss = "\x34\xd1\x15\x78\xd0\x14\xca\x2f\xf9\xc3\x85\x74\x03\xaf\x1f\x1f",
    .dec_oss = "\xf2\x90\x9b\x68\x7c\xc3\x5e\xd9\x14\xeb\x04\x03\x64\x52\x32\xd6",
    .puk_gen = "\xe1\x78\x33\xbf\xd5\xff\xaf\x8c\x67\xe0\x90\xce\xe5\x87\xbb\x3e",
    .prks_gen = "\x1c\x06\xa3\x79\x74\x44\xc7\x06\x97\x30\xfa\x6e\x39\xb3\x32\x28",
    .sign    = "\x4d\x3b\x53\x50\x03\x3d\x04\xbe\xb0\x93\x79\xd6\x73\xf8\xf3\x0d",
    .verify  = "\xf5\x51\xae\x41\xdb\x82\xa2\xf9\x73\x5f\xe6\xbd\x3c\x32\x31\x21",
    .kekdf   = "\x9f\x89\x53\x24\xb3\x5f\xa1\x75\xe7\x24\xf6\x6f\xc9\xd7\x99\x30",
};
#endif
/*****************************************************************************
 * Static variables - group of CMAC
 ****************************************************************************/
#ifdef ECF39303
/**
 * @brief group of CMAC of RSA micro programs for ECF39303
 */


static pufs_rsa_mprog_cmac_st *gsum_ECF39303_RSA2048[] =
{
    &sum_ECF39303_00000000_RSA2048,
};
#else
/**
 * @brief group of CMAC of RSA micro programs for ECF09303
 */

static pufs_rsa_mprog_cmac_st *gsum_ECF09303_RSA2048[] =
{
    &sum_ECF09303_00000000_RSA2048,
};
#endif
#ifdef ECF39303
static pufs_sm2_mprog_cmac_st *gsum_ECF39303_SM2[] =
{
    &sum_ECF39303_00000000_SM2,
};
#else
static pufs_sm2_mprog_cmac_st *gsum_ECF09303_SM2[] =
{
    &sum_ECF09303_00000000_SM2,
};
#endif
/*****************************************************************************
 * Static variables - Micro programs
 ****************************************************************************/
#ifdef ECF39303
/**
 * @brief RSA micro programs for ECF39303-00000000
 */

static pufs_rsa_mprog_func_st prog_ECF39303_RSA2048 =
{
    .prk = "\x40\x00\x00\x8a\x80\x40\x08\x8a\xc0\x80\x10\x0a\x00\xc1\x18\x8a\x00\x08\x21\x26\x40\x40\x29\x26\x00\x0c\x80\x43\xc6\x10\x18\x08\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .puk = "\x40\x00\x00\x8a\xc0\x80\x10\x0a\x00\x0b\x80\xc3\xc6\x10\x18\x08\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
};
#else
/**
 * @brief RSA micro programs for ECF09303-00000000
 */

static pufs_rsa_mprog_func_st prog_ECF09303_RSA2048 =
{
    .prk = "\x08\x01\x00\x8e\x40\x00\x00\x8a\xc0\x80\x10\x0a\x00\x41\x08\x8a\x00\x08\x21\x26\x40\x40\x29\x26\x00\x0c\x80\x43\xc6\x10\x18\x08\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .puk = "\x40\x00\x00\x8a\xc0\x80\x10\x0a\x00\x0b\x80\xc3\xc6\x10\x18\x08\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
};
#endif
/**
 * @brief SM2 micro programs for ECF39303-00000000
 */
#ifdef ECF39303
static pufs_sm2_mprog_func_st prog_ECF39303_SM2 = 
{
    .enc_oss = "\x28\x00\x00\x8e\x68\x00\x00\x8a\xe1\xc0\x03\xa6\x61\x80\x02\x26\x20\x20\x02\x92\x00\x05\x00\xc3\x1e\x10\x00\x89\x48\x00\x00\x8e\x58\x80\x02\x8a\x60\xc0\x03\x0a\x00\x48\x06\x0a\x00\x09\xc0\x41\x1e\x10\x11\x08\x28\x10\x12\x08\x48\x00\x00\x8e\x78\x80\x02\x0a\x80\xc0\x03\x8a\x00\x48\x06\x0a\x00\x09\xc0\x41\x1e\x10\x01\x09\x28\x10\x00\x89\x08\x08\x00\xbd\x00\x08\x10\x88\x08\x08\x0f\x88\x00\x01\x00\x45\x00\x00\x00\x39\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .dec_oss = "\x48\x00\x00\x8e\x78\x80\x02\x0a\x80\xc0\x03\x8a\x00\x40\x06\xae\x80\x40\x06\xca\x00\x09\xc0\x41\x1e\x10\x01\x09\x28\x10\x00\x89\x08\x08\x00\xbd\x00\x08\x10\x88\x08\x08\x0f\x88\x00\x01\x00\x45\x00\x00\x00\x39\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .puk_gen = "\x48\x00\x00\x8e\x58\x80\x02\x8a\x60\xc0\x03\x0a\x00\x40\x06\xae\x80\x40\x06\xca\x00\x09\xc0\x41\x1e\x10\x11\x08\x28\x10\x12\x08\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .prks_gen = "\x28\x00\x00\x8e\x68\x00\x00\x8a\x00\x00\x00\x28\x20\x20\x02\x92\x00\x05\x00\xc3\x80\xc0\x03\x46\x00\xc0\x03\x36\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .sign    = "\x28\x00\x00\x8e\x68\x00\x00\x8a\xe0\xc0\x03\x26\x60\x80\x02\xa6\x20\x20\x02\x92\x00\x05\x00\xc3\x1e\x10\x00\x89\x48\x00\x00\x8e\x58\x80\x02\x8a\x60\xc0\x03\x0a\x00\x48\x06\x0a\x00\x09\xc0\x41\x1e\x10\x01\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x08\x48\x01\x0a\x00\x02\x00\x43\x1e\x10\x11\x08\x28\x00\x00\x8e\x68\x00\x00\x8a\x70\x40\x01\x8a\x00\x02\x00\x43\x1e\x10\x02\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x10\x48\x01\x0a\x88\x80\x02\x0a\x00\x02\x00\x43\x1e\x10\x11\x08\x00\x00\x01\xad\x80\x00\x01\xc9\x28\x00\x00\x8e\x68\x00\x00\x8a\x20\x40\x01\x92\x08\x88\x02\x0a\x00\x02\x00\x43\x1e\x10\x02\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x10\x48\x01\x0a\x00\x06\x00\xc3\x1e\x10\x02\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x88\x40\x01\x0a\x08\x88\x02\x0a\x00\x04\x00\x43\x1e\x10\x01\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x00\x48\x01\x8a\x08\x88\x02\x0a\x00\x03\x00\xc3\x1e\x10\x00\x89\x28\x00\x00\x8e\x68\x00\x00\x8a\x00\x48\x01\x8a\x10\x88\x02\x0a\x00\x04\x00\x43\x1e\x10\x12\x08\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 
    .verify  = "\x68\x00\x00\x8a\x88\x40\x01\x0a\x00\x00\x00\xc3\x00\x40\x62\xa0\x00\x01\x00\x43\x00\x40\x82\x20\x90\x40\x01\x0a\x00\x00\x00\xc3\x00\x48\x62\x20\x00\x01\x00\x43\x00\x48\x82\xa0\x88\x40\x01\x0a\x90\x80\x02\x0a\x00\x02\x00\x43\x1e\x10\x00\x89\x48\x00\x00\x8e\x58\x80\x02\x8a\x60\xc0\x03\x0a\x20\x00\x05\x92\x90\x40\x06\x8a\x00\x16\x80\x41\x1e\x10\x02\x09\x28\x10\x03\x89\x48\x00\x00\x8e\x78\x80\x02\x0a\x80\xc0\x03\x8a\x20\x00\x05\x92\x00\x48\x06\x0a\x00\x16\x80\x41\x1e\x10\x00\x89\x28\x10\x01\x09\x48\x00\x00\x8e\x00\x88\x02\x8a\x08\xc8\x03\x0a\x10\x08\x05\x0a\x18\x48\x06\x0a\x00\x07\x00\xc1\x00\x50\xa2\x20\x1e\x10\x00\x89\x28\x00\x00\x8e\x68\x00\x00\x8a\x00\x48\x01\x8a\x00\x02\x00\x43\x1e\x10\x00\x89\x70\x40\x01\x8a\x00\x02\x00\x43\x1e\x10\x01\x09\x00\x48\x01\x8a\x08\x88\x02\x0a\x00\x02\x00\x43\x1e\x10\x00\x89\x00\x08\x11\x1c\x00\x58\x02\x18\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 
    .kekdf   = "\x28\x00\x00\x8e\x68\x00\x00\x8a\x70\x40\x01\x86\x71\x60\x01\x86\x72\x80\x01\x06\x73\xa0\x01\x06\x00\x90\x02\xae\x80\x80\x02\x4a\x00\xc0\x03\x2e\x80\xc0\x03\x4a\x00\x05\x00\xc3\x1e\x10\x00\x89\x48\x00\x00\x8e\x78\x80\x02\x0a\x80\xc0\x03\x8a\x20\x00\x05\x92\x74\x40\x06\x86\x75\x60\x06\x86\x76\x80\x06\x06\x77\xa0\x06\x06\x00\x16\x80\x41\x1e\x10\x01\x09\x28\x10\x02\x09\x48\x00\x00\x8e\x88\x80\x02\x0a\x90\xc0\x03\x0a\x08\x08\x05\x0a\x10\x48\x06\x8a\x00\x07\x80\x41\x1e\x10\x01\x09\x28\x10\x02\x09\x48\x00\x00\x8e\x08\x88\x02\x0a\x10\xc8\x03\x0a\x00\x48\x06\x0a\x00\x09\xc0\x41\x1e\x10\x01\x09\x28\x10\x00\x89\x08\x08\x00\xbd\x00\x08\x11\x08\x08\x08\x12\x88\x00\x01\x00\x45\x00\x00\x00\x39\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
};
#else
static pufs_sm2_mprog_func_st prog_ECF09303_SM2 = 
{
    .enc_oss = "\x28\x00\x00\x8e\x68\x00\x00\x8a\xe1\xc0\x03\xa6\x61\x80\x02\x26\x20\x20\x02\x92\x00\x05\x00\xc3\x1e\x10\x00\x89\x48\x00\x00\x8e\x58\x80\x02\x8a\x60\xc0\x03\x0a\x20\x00\x05\x92\x00\x48\x06\x0a\x00\x16\xc0\xc1\x1e\x10\x11\x08\x28\x10\x12\x08\x48\x00\x00\x8e\x78\x80\x02\x0a\x80\xc0\x03\x8a\x20\x00\x05\x92\x00\x48\x06\x0a\x00\x16\xc0\xc1\x1e\x10\x01\x09\x28\x10\x00\x89\x08\x08\x00\xbd\x00\x08\x10\x88\x08\x08\x0f\x88\x00\x01\x00\x45\x00\x00\x00\x39\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .dec_oss = "\x48\x00\x00\x8e\x78\x80\x02\x0a\x80\xc0\x03\x8a\x20\x00\x05\x92\x00\x40\x06\xae\x80\x40\x06\xca\x00\x16\xc0\xc1\x1e\x10\x01\x09\x28\x10\x00\x89\x08\x08\x00\xbd\x00\x08\x10\x88\x08\x08\x0f\x88\x00\x01\x00\x45\x00\x00\x00\x39\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .puk_gen = "\x48\x00\x00\x8e\x58\x80\x02\x8a\x60\xc0\x03\x0a\x20\x00\x05\x92\x00\x40\x06\xae\x80\x40\x06\xca\x00\x16\xc0\xc1\x1e\x10\x11\x08\x28\x10\x12\x08\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .prks_gen = "\x28\x00\x00\x8e\x68\x00\x00\x8a\x00\x00\x00\x28\x20\x20\x02\x92\x00\x05\x00\xc3\x80\xc0\x03\x46\x00\xc0\x03\x36\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .sign    = "\x28\x00\x00\x8e\x68\x00\x00\x8a\xe0\xc0\x03\x26\x60\x80\x02\xa6\x20\x20\x02\x92\x00\x05\x00\xc3\x1e\x10\x00\x89\x48\x00\x00\x8e\x58\x80\x02\x8a\x60\xc0\x03\x0a\x20\x00\x05\x92\x00\x48\x06\x0a\x00\x16\xc0\xc1\x1e\x10\x01\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x08\x48\x01\x0a\x00\x02\x00\x43\x1e\x10\x11\x08\x28\x00\x00\x8e\x68\x00\x00\x8a\x70\x40\x01\x8a\x00\x02\x00\x43\x1e\x10\x02\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x10\x48\x01\x0a\x88\x80\x02\x0a\x00\x02\x00\x43\x1e\x10\x11\x08\x00\x00\x01\xad\x80\x00\x01\xc9\x28\x00\x00\x8e\x68\x00\x00\x8a\x20\x40\x01\x92\x08\x88\x02\x0a\x00\x02\x00\x43\x1e\x10\x02\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x10\x48\x01\x0a\x00\x06\x00\xc3\x1e\x10\x02\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x88\x40\x01\x0a\x08\x88\x02\x0a\x00\x04\x00\x43\x1e\x10\x01\x09\x28\x00\x00\x8e\x68\x00\x00\x8a\x00\x48\x01\x8a\x08\x88\x02\x0a\x00\x03\x00\xc3\x1e\x10\x00\x89\x28\x00\x00\x8e\x68\x00\x00\x8a\x00\x48\x01\x8a\x10\x88\x02\x0a\x00\x04\x00\x43\x1e\x10\x12\x08\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00",
    .verify  = "\x68\x00\x00\x8a\x88\x40\x01\x0a\x00\x00\x00\xc3\x00\x40\x62\xa0\x00\x01\x00\x43\x00\x40\x82\x20\x90\x40\x01\x0a\x00\x00\x00\xc3\x00\x48\x62\x20\x00\x01\x00\x43\x00\x48\x82\xa0\x88\x40\x01\x0a\x90\x80\x02\x0a\x00\x02\x00\x43\x1e\x10\x00\x89\x48\x00\x00\x8e\x58\x80\x02\x8a\x60\xc0\x03\x0a\x20\x00\x05\x92\x90\x40\x06\x8a\x00\x16\x80\x41\x1e\x10\x02\x09\x28\x10\x03\x89\x48\x00\x00\x8e\x78\x80\x02\x0a\x80\xc0\x03\x8a\x20\x00\x05\x92\x00\x48\x06\x0a\x00\x16\x80\x41\x1e\x10\x00\x89\x28\x10\x01\x09\x48\x00\x00\x8e\x00\x88\x02\x8a\x08\xc8\x03\x0a\x10\x08\x05\x0a\x18\x48\x06\x0a\x00\x07\x00\xc1\x00\x50\xa2\x20\x1e\x10\x00\x89\x28\x00\x00\x8e\x68\x00\x00\x8a\x00\x48\x01\x8a\x00\x02\x00\x43\x1e\x10\x00\x89\x70\x40\x01\x8a\x00\x02\x00\x43\x1e\x10\x01\x09\x00\x48\x01\x8a\x08\x88\x02\x0a\x00\x02\x00\x43\x1e\x10\x00\x89\x00\x08\x11\x1c\x00\x58\x02\x18\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
    .kekdf   = "\x28\x00\x00\x8e\x68\x00\x00\x8a\x70\x40\x01\x86\x71\x60\x01\x86\x72\x80\x01\x06\x73\xa0\x01\x06\x00\x90\x02\xae\x80\x80\x02\x4a\x00\xc0\x03\x2e\x80\xc0\x03\x4a\x00\x05\x00\xc3\x1e\x10\x00\x89\x48\x00\x00\x8e\x78\x80\x02\x0a\x80\xc0\x03\x8a\x20\x00\x05\x92\x74\x40\x06\x86\x75\x60\x06\x86\x76\x80\x06\x06\x77\xa0\x06\x06\x00\x16\x80\x41\x1e\x10\x01\x09\x28\x10\x02\x09\x48\x00\x00\x8e\x88\x80\x02\x0a\x90\xc0\x03\x0a\x08\x08\x05\x0a\x10\x48\x06\x8a\x00\x07\x80\x41\x1e\x10\x01\x09\x28\x10\x02\x09\x48\x00\x00\x8e\x08\x88\x02\x0a\x10\xc8\x03\x0a\x20\x00\x05\x92\x00\x48\x06\x0a\x00\x16\xc0\xc1\x1e\x10\x01\x09\x28\x10\x00\x89\x08\x08\x00\xbd\x00\x08\x11\x08\x08\x08\x12\x88\x00\x01\x00\x45\x00\x00\x00\x39\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
};
#endif
/*****************************************************************************
 * Static variables - RSA
 ****************************************************************************/
#ifdef ECF39303
pufs_rsa_mprog_st rsa_ECF39303[] = 
{
    {
        .cmac = NULL,
        .func = NULL,
    },
    {
        .cmac = gsum_ECF39303_RSA2048,
        .func = &prog_ECF39303_RSA2048,
    },
};
#else
pufs_rsa_mprog_st rsa_ECF09303[] = 
{
    {
        .cmac = NULL,
        .func = NULL,
    },
    {
        .cmac = gsum_ECF09303_RSA2048,
        .func = &prog_ECF09303_RSA2048,
    },
};
#endif
/*****************************************************************************
 * Static variables - SM2
 ****************************************************************************/

pufs_sm2_mprog_st sm2_mprog[] =
{
#ifdef ECF39303
    {
        .cmac = gsum_ECF39303_SM2,
        .func = &prog_ECF39303_SM2,
    },
#else
    {
        .cmac = gsum_ECF09303_SM2,
        .func = &prog_ECF09303_SM2,
    },
#endif
};

/*****************************************************************************
 * Variables
 ****************************************************************************/

pufs_rsa_mprog_st* rsa_mprog[] =
{
#ifdef ECF39303
    rsa_ECF39303,
#else
    rsa_ECF09303,
#endif
};
